/*
 * Copyright 2015 Google Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.github.webbluetoothcg.bletestperipheral;

import android.app.Fragment;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattService;
import android.os.ParcelUuid;

public abstract class ServiceFragment extends Fragment {
	public abstract BluetoothGattService getBluetoothGattService();

	public abstract ParcelUuid getServiceUUID();

	/**
	 * Function to communicate to the ServiceFragment that a device wants to write to a
	 * characteristic.
	 * <p>
	 * The ServiceFragment should check that the value being written is valid and
	 * return a code appropriately. The ServiceFragment should update the UI to reflect the change.
	 *
	 * @param characteristic Characteristic to write to
	 * @param value          Value to write to the characteristic
	 * @return {@link android.bluetooth.BluetoothGatt#GATT_SUCCESS} if the write operation
	 * was completed successfully. See {@link android.bluetooth.BluetoothGatt} for GATT return codes.
	 */
	public int writeCharacteristic(BluetoothGattCharacteristic characteristic, int offset, byte[] value) {
		throw new UnsupportedOperationException("Method writeCharacteristic not overridden");
	}

	/**
	 * Function to notify to the ServiceFragment that a device has disabled notifications on a
	 * CCC descriptor.
	 * <p>
	 * The ServiceFragment should update the UI to reflect the change.
	 *
	 * @param characteristic Characteristic written to
	 */
	public void notificationsDisabled(BluetoothGattCharacteristic characteristic) {
		throw new UnsupportedOperationException("Method notificationsDisabled not overridden");
	}

	/**
	 * Function to notify to the ServiceFragment that a device has enabled notifications on a
	 * CCC descriptor.
	 * <p>
	 * The ServiceFragment should update the UI to reflect the change.
	 *
	 * @param characteristic Characteristic written to
	 * @param indicate       Boolean that says if it's indicate or notify.
	 */
	public void notificationsEnabled(BluetoothGattCharacteristic characteristic, boolean indicate) {
		throw new UnsupportedOperationException("Method notificationsEnabled not overridden");
	}

	/**
	 * This interface must be implemented by activities that contain a ServiceFragment to allow an
	 * interaction in the fragment to be communicated to the activity.
	 * 此接口必须由包含ServiceFragment的实例对象来实现，以允许将片段中的交互传递给实例对象。
	 */
	public interface ServiceFragmentDelegate {
		void sendNotificationToDevices(BluetoothGattCharacteristic characteristic);
	}
}
